package view.thread;

import java.awt.Cursor;
import java.io.File;
import javax.swing.JTextArea;
import javax.swing.table.DefaultTableModel;
import util.Consola;
import view.panels.IndexJPanel;

/**
 *
 * @author
 * Guerino
 */
public class CountFileThread extends Thread{
    private IndexJPanel wndPadre;
    private int contArchivos;
    private File file;
    private Consola consola;
    private JTextArea txtConsola;
    private DefaultTableModel tblModel;    

    public CountFileThread(IndexJPanel padre, JTextArea txt, DefaultTableModel model, File f) {
        this.contArchivos = 0;
        this.file = f;
        this.txtConsola = txt;
        this.tblModel = model;
        this.wndPadre = padre;
        //Para la salida de informacion
        this.consola = new Consola();
        this.consola.setTextArea(txtConsola);
    }

    /*
     * Metodo encargado de contar la cantidad
     * de archivos en el arbol de directorios pasado por parametro
     */
    private void contarArchivos(File f){
        try {
            //Si es un directorio
            if(f.isDirectory()){            
                //Listamos todo su contenido
                File files[] = f.listFiles();
                for (int i = 0; i < files.length; i++) {
                    if(files[i].isDirectory()){
                        //consola.out(file[i].toString());
                        //Llamamos recursivamente al directorio hijo
                        contarArchivos(files[i]);
                    }else{
                        contArchivos++;
                    }                             
                }
            }   
        } catch (NullPointerException e) {
            System.out.println("Archivo nulo o inaccesible.");
        }            
    }
    
    //Metodo encargado de correr el hilo
    @Override
    public void run() {
        wndPadre.setCursor(new Cursor(Cursor.WAIT_CURSOR));
        wndPadre.getButtonSeleccion().setEnabled(false);
        wndPadre.getButtonStart().setEnabled(false);
        consola.out("Contando archivos...");
        //Llamada al metodo recursivo
        contarArchivos(this.file);
        
        String str = "  "+String.valueOf(this.contArchivos);      
        //Agregamos al modelo de la tabla cada ruta seleccionada
        Object[] rowData = {file.getAbsolutePath().toString(),str," Pendiente"};        
        tblModel.addRow(rowData); 
        
        wndPadre.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
        wndPadre.getButtonSeleccion().setEnabled(true);
        wndPadre.getButtonStart().setEnabled(true);
        consola.out("Listo");
        
    }    
}
